home *** CD-ROM | disk | FTP | other *** search
/ Apple Developer Connection Student Program / ADC Tools Sampler CD Disk 3 1999.iso / Cool Demos, SDKs, & Tools / Demos⁄Tools⁄Offers / Eiffel for CW beta 3 / EiffelS2 / LIBRARY / MOTEL / Files.c < prev    next >
Text File  |  1999-05-26  |  8KB  |  325 lines

  1. /*------------------------------------------------------------------*/
  2. /* Eiffel/S II MacOS Runtime                                         */
  3. /*------------------------------------------------------------------*/
  4. /* Author    : Ian Joyner                                               */
  5. /* Release   : 1.0                                                  */
  6. /* Date      : Dec. 1997                                            */
  7. /* Copyright : Ian Joyner                                            */
  8. /*------------------------------------------------------------------*/
  9.  
  10. #include <Files.h>
  11. #include <StandardFile.h>
  12. #include <Eiffel2.h>
  13. #include "MOTEL.h"
  14.  
  15. /********************************************************************/
  16. /*                                                                    */
  17. /*                        FILES and DIRECTORIES                        */
  18. /*                                                                    */
  19. /********************************************************************/
  20.  
  21. INTEGER platform_file_rename (INTEGER vol_id, INTEGER dir_id, ConstStr255Param name, ConstStr255Param new_name)
  22. {
  23.     Str255 scratch;
  24.         
  25.     strcpy (scratch, name);
  26.     c2pstr ((char *)scratch);
  27.     strcpy (scratch_string, new_name);
  28.     c2pstr ((char *)scratch_string);
  29.     
  30.     return HRename (vol_id, dir_id, scratch, scratch_string);
  31. }
  32.  
  33. INTEGER platform_file_move (INTEGER vol_id, INTEGER dir_id, INTEGER to_dir_id, ConstStr255Param name)
  34. {
  35.     Str255 scratch;
  36.         
  37.     strcpy (scratch, name);
  38.     c2pstr ((char *)scratch);
  39.     strcpy (scratch_string, name);
  40.     c2pstr ((char *)scratch_string);
  41.     
  42.     return CatMove (vol_id, dir_id, scratch, to_dir_id, scratch_string);
  43. }
  44.  
  45. INTEGER platform_file_delete (INTEGER vol_id, INTEGER dir_id, ConstStr255Param name)
  46. {
  47.     strcpy (scratch_string, name);
  48.     c2pstr ((char *)scratch_string);
  49.     
  50.     return HDelete (vol_id, dir_id, scratch_string);
  51. }
  52.  
  53. /********************************************************************/
  54. /*                                                                    */
  55. /*                                VOLUMES                                */
  56. /*                                                                    */
  57. /********************************************************************/
  58.  
  59. INTEGER platform_file_volume_eject (INTEGER vol_id, ConstStr255Param name)
  60. {
  61.     strcpy (scratch_string, name);
  62.     c2pstr ((char *)scratch_string);
  63.     
  64.     return Eject (scratch_string, vol_id);
  65. }
  66.  
  67. INTEGER platform_file_volume_unmount (INTEGER vol_id, ConstStr255Param name)
  68. {
  69.     strcpy (scratch_string, name);
  70.     c2pstr ((char *)scratch_string);
  71.     
  72.     return UnmountVol (scratch_string, vol_id);
  73. }
  74.  
  75. INTEGER platform_file_volume_flush (INTEGER vol_id, ConstStr255Param name)
  76. {
  77.     strcpy (scratch_string, name);
  78.     c2pstr ((char *)scratch_string);
  79.     
  80.     return FlushVol (scratch_string, vol_id);
  81. }
  82.  
  83. INTEGER platform_file_volume_set_default (INTEGER vol_id, ConstStr255Param name)
  84. {
  85.     strcpy (scratch_string, name);
  86.     c2pstr ((char *)scratch_string);
  87.     
  88.     return SetVol (scratch_string, vol_id);
  89. }
  90.  
  91. INTEGER platform_file_volume_get_default (INTEGER *vol_id)
  92. {
  93.     OSErr e;
  94.     int v;
  95.     long d;
  96.     
  97.     e = HGetVol (&scratch_string, &v, &d);
  98.     
  99.     *vol_id = v;
  100.     
  101.     return e;
  102. }
  103.  
  104. /********************************************************************/
  105. /*                                                                    */
  106. /*                            DIRECTORIES                                */
  107. /*                                                                    */
  108. /********************************************************************/
  109.  
  110. INTEGER platform_file_directory_create (INTEGER vol_id, INTEGER dir_id, ConstStr255Param name, POINTER id)
  111. {
  112.     strcpy (scratch_string, name);
  113.     c2pstr ((char *)scratch_string);
  114.     
  115.     return DirCreate (vol_id, dir_id, scratch_string, (INTEGER *)id);
  116. }
  117.  
  118. INTEGER platform_file_directory_set_default (INTEGER vol_id, ConstStr255Param name)
  119. {
  120.     strcpy (scratch_string, name);
  121.     c2pstr ((char *)scratch_string);
  122.     
  123.     return SetVol (scratch_string, vol_id);
  124. }
  125.  
  126. INTEGER platform_file_directory_get_default (INTEGER *dir_id)
  127. {
  128.     OSErr e;
  129.     int v;
  130.     long d;
  131.     
  132.     e = HGetVol (&scratch_string, &v, &d);
  133.     
  134.     *dir_id = d;
  135.     
  136.     return e;
  137. }
  138.  
  139. /********************************************************************/
  140. /*                                                                    */
  141. /*                                FILES                                */
  142. /*                                                                    */
  143. /********************************************************************/
  144.  
  145. INTEGER platform_file_create (INTEGER vol_id, INTEGER dir_id, ConstStr255Param name, ConstStr255Param c, ConstStr255Param ft)
  146. {
  147.     OSType creator;
  148.     OSType file_type;
  149.     
  150.     strcpy (scratch_string, name);
  151.     c2pstr ((char *)scratch_string);
  152.     
  153.     strncpy (&creator, c, 4);
  154.     strncpy (&file_type, ft, 4);
  155.     
  156.     return HCreate (vol_id, dir_id, scratch_string, creator, file_type);
  157. }
  158.  
  159. INTEGER platform_file_open (INTEGER vol_id, INTEGER dir_id, ConstStr255Param name, INTEGER permission, INTEGER *id)
  160. {
  161.     short ref_num;
  162.     INTEGER result;
  163.     strcpy (scratch_string, name);
  164.     c2pstr ((char *)scratch_string);
  165.     
  166.     result = HOpen (vol_id, dir_id, scratch_string, permission, &ref_num);
  167.     *id = ref_num;
  168.     return result;
  169. }
  170.  
  171. INTEGER platform_file_openDF (INTEGER vol_id, INTEGER dir_id, ConstStr255Param name, INTEGER permission, INTEGER *id)
  172. {
  173.     short ref_num;
  174.     INTEGER result;
  175.     strcpy (scratch_string, name);
  176.     c2pstr ((char *)scratch_string);
  177.     
  178.     result = HOpenDF (vol_id, dir_id, scratch_string, permission, &ref_num);
  179.     *id = ref_num;
  180.     return result;
  181. }
  182.  
  183. INTEGER platform_file_openRF (INTEGER vol_id, INTEGER dir_id, ConstStr255Param name, INTEGER permission, INTEGER *id)
  184. {
  185.     short ref_num;
  186.     INTEGER result;
  187.     strcpy (scratch_string, name);
  188.     c2pstr ((char *)scratch_string);
  189.     
  190.     result = HOpenRF (vol_id, dir_id, scratch_string, permission, &ref_num);
  191.     *id = ref_num;
  192.     return result;
  193. }
  194.  
  195. INTEGER platform_file_read (INTEGER id, INTEGER *count, POINTER buffer)
  196. {
  197.     return FSRead (id, count, buffer);
  198. }
  199.  
  200. INTEGER platform_file_write (INTEGER id, INTEGER *count, POINTER buffer)
  201. {
  202.     return FSWrite (id, count, buffer);
  203. }
  204.  
  205. INTEGER platform_file_close (INTEGER id)
  206. {
  207.     return FSClose (id);
  208. }
  209.  
  210. INTEGER platform_file_position (INTEGER id, INTEGER *pos)
  211. {
  212.     return GetFPos (id, pos);
  213. }
  214.  
  215. INTEGER platform_file_set_position (INTEGER id, INTEGER mode, INTEGER pos)
  216. {
  217.     return SetFPos (id, mode, pos);
  218. }
  219.  
  220. INTEGER platform_file_eof (INTEGER id, INTEGER *pos)
  221. {
  222.     return GetEOF (id, pos);
  223. }
  224.  
  225. INTEGER platform_file_set_eof (INTEGER id, INTEGER new_eof)
  226. {
  227.     return SetEOF (id, new_eof);
  228. }
  229.  
  230. INTEGER platform_file_allocate (INTEGER id, INTEGER *count)
  231. {
  232.     return Allocate (id, count);
  233. }
  234.  
  235. INTEGER platform_file_allocate_contiguous (INTEGER id, INTEGER *count)
  236. {
  237.     return AllocContig (id, count);
  238. }
  239.  
  240. INTEGER platform_file_acquire (INTEGER vol_id, INTEGER dir_id, ConstStr255Param name)
  241. {
  242.     strcpy (scratch_string, name);
  243.     c2pstr ((char *)scratch_string);
  244.     
  245.     return HSetFLock (vol_id, dir_id, scratch_string);
  246. }
  247.  
  248. INTEGER platform_file_release (INTEGER vol_id, INTEGER dir_id, ConstStr255Param name)
  249. {
  250.     strcpy (scratch_string, name);
  251.     c2pstr ((char *)scratch_string);
  252.     
  253.     return HRstFLock (vol_id, dir_id, scratch_string);
  254. }
  255.  
  256. INTEGER platform_file_exchange (INTEGER vol_id, INTEGER dir_id, ConstStr255Param name,
  257.                                 INTEGER other_vol_id, INTEGER other_dir_id, ConstStr255Param other_name)
  258. {
  259.     FSSpec fs, other_fs;
  260.     Str255 scratch;
  261.         
  262.     strcpy (scratch, name);
  263.     c2pstr ((char *)scratch);
  264.     strcpy (scratch_string, other_name);
  265.     c2pstr ((char *)scratch_string);
  266.     
  267.     FSMakeFSSpec (vol_id, dir_id, scratch, &fs);
  268.     FSMakeFSSpec (other_vol_id, other_dir_id, scratch_string, &other_fs);
  269.  
  270.     return FSpExchangeFiles (&fs, &other_fs);
  271. }
  272.  
  273. /********************************************************************/
  274. /*                                                                    */
  275. /*                        STANDARD FILE DIALOGS                        */
  276. /*                                                                    */
  277. /********************************************************************/
  278.  
  279. OSType type_list [20];
  280. int n_types;
  281. StandardFileReply sfr;
  282.  
  283. POINTER platform_file_get_file (BOOLEAN use_filter, BOOLEAN *good, INTEGER *type, INTEGER *vol_id, INTEGER *dir_id)
  284. {
  285.     StandardGetFile (0, n_types, type_list, &sfr);
  286.     
  287.     *good = sfr.sfGood;
  288.     *type = sfr.sfType;
  289.     *vol_id = sfr.sfFile.vRefNum;
  290.     *dir_id = sfr.sfFile.parID;
  291.     
  292.     n_types = 0;
  293.     p2cstr (&sfr.sfFile.name);
  294.     
  295.     return &sfr.sfFile.name;
  296. }
  297.  
  298. void platform_file_add_type (POINTER t)
  299. {
  300.     strncpy (&type_list [n_types], t, 4);
  301.     
  302.     n_types += 1;
  303. }
  304.  
  305. POINTER platform_file_put_file (POINTER prompt, POINTER initial_file_name, BOOLEAN *good, INTEGER *vol_id, INTEGER *dir_id)
  306. {
  307.     Str255 scratch;
  308.         
  309.     strcpy (scratch, prompt);
  310.     c2pstr ((char *)scratch);
  311.     strcpy (scratch_string, initial_file_name);
  312.     c2pstr ((char *)scratch_string);
  313.  
  314.     StandardPutFile (scratch, scratch_string, &sfr);
  315.     
  316.     *good = sfr.sfGood;
  317.     *vol_id = sfr.sfFile.vRefNum;
  318.     *dir_id = sfr.sfFile.parID;
  319.     
  320.     p2cstr (&sfr.sfFile.name);
  321.     
  322.     return &sfr.sfFile.name;
  323. }
  324.  
  325.